/*
 * Copyright 2012 jsm.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.abiwebz.office.rm.database.configuration;

import net.abiwebz.office.rm.database.DatabaseDriver;
import net.abiwebz.office.rm.database.util.WizardValidate;
import org.openide.WizardDescriptor;
import org.openide.util.HelpCtx;

public class DbConfigWizardPanel3 extends WizardValidate implements WizardDescriptor.Panel<WizardDescriptor> {

    /**
     * The visual component that displays this panel. If you need to access the
     * component from this class, just use getComponent().
     */
    private DbConfigVisualPanel3 component;
    private boolean importFlag;

    // Get the visual component for the panel. In this template, the component
    // is kept separate. This can be more efficient: if the wizard is created
    // but never displayed, or not all panels are displayed, it is better to
    // create only those which really need to be visible.
    @Override
    public DbConfigVisualPanel3 getComponent() {
        if (component == null) {
            component = new DbConfigVisualPanel3();
        }
        return component;
    }

    @Override
    public HelpCtx getHelp() {
        // Show no Help button for this panel:
        return HelpCtx.DEFAULT_HELP;
        // If you have context help:
        // return new HelpCtx("help.key.here");
    }

    /**
     * Return the validation state of this page.
     * 
     * @return True if this page is valid
     */
    @Override
    public boolean isValid() {
        return isValid;
    }

    /**
     * Read the setting of other pages. 
     * 
     * @param wiz WizardDescriptor containing the wizard values
     */
    @Override
    public void readSettings(WizardDescriptor wiz) {
        // use wiz.getProperty to retrieve previous panel state
        this.model = wiz;
        getComponent().addPropertyChangeListener(this);
        if (getComponent().getDriverConfiguration() != null) {
            getComponent().getDriverConfiguration().addPropertyChangeListener(this);
        }
        getComponent().read(wiz);
        importFlag = (Boolean) wiz.getProperty(DbConfigVisualPanel1.PROP_IMPORT_CHECK);
        this.getComponent().enableComponents(!importFlag);
    }

    /**
     * Store the setting for this page. Work is done on the visual side of
     * the page.
     * 
     * @param wiz WizardDescriptor containing the wizard values
     */
    @Override
    public void storeSettings(WizardDescriptor wiz) {
        // use wiz.putProperty to remember current panel state
        getComponent().store(wiz);
    }

    /**
     * Check and Validation. This function check and validate entered values
     * and return true if all is ok. If it is not valid the a message is 
     * displayed to the user.
     * 
     * @return True if values are valid
     */
    @Override
    public boolean check() {
        if(importFlag){
            setInformation("Nothing to do here, data is provided by the import file !");
            return true;
        }
        if (getComponent().needOffline()) { // Check components
            DatabaseDriver driver = getComponent().getDriver();
            if (driver == null) {
                setError("No driver is selected !");
                return false;
            } else {
                DriverConfigurationPanel panel = getComponent().getDriverConfiguration();
                if (!panel.check()) {
                    String message = panel.getMessage();
                    setError(message);
                    return false;
                }
            }
        }

        clearMessage();
        return true;

    }
}
